package modules.hcluster;

import java.util.ArrayList;
import java.util.List;

import com.beust.jcommander.Parameter;

/**
 * Handles all regular application parameters for hcluster Module. Used for parameter parsing for hcluster module.
 * @author Raja Hashim Ali.
 */
public class Parameters {

	/** Required parameters: Application/Module to run */
	@Parameter(description = "<Tab/Space delimited Blast Results file with gene1, gene2 and bitscore>")
	public List<String> files = new ArrayList<String>();
	
	/** Help. */
	@Parameter(names = {"-h", "--help"}, description = "Display help. To understand the options and input parameters, use help.")
	public Boolean help = false;
	
	/** breaking edge density */
	@Parameter(names = {"-b","--breakingedgedensity"}, description = "breaking edge density.")
	public String breakingEdgeDensity = "0.10";
	
	/** the once-fail-inactive-forever mode */
	@Parameter(names = {"-O","--failinactiveforevermode"}, description = "the once-fail-inactive-forever mode.")
	public boolean failInactiveForeverMode = false;
	
	/** weight resolution for '-O'. */
	@Parameter(names = {"-r","--weightresolutiono"}, description = "weight resolution for '-O'.")
	public int weightResolutionO = 5;
	
	/** category file */
	@Parameter(names = {"-C","--categoryfile"}, description = "category file.")
	public String categoryfile = "";
	
	/** stringent level */
	@Parameter(names = {"-L","--stringentlevel"}, description = "stringent level ('3' is the strictest). ")
	public int stringentLevel = 2;

	/** only find single-linkage clusters (bypass h-cluster) */
	@Parameter(names = {"-c","--singlelinkageclustering"}, description = "only find single-linkage clusters (bypass h-cluster).")
	public boolean singleLinkageClustering = false;
	
	/** verbose mode */
	@Parameter(names = {"-v","--verbosemode"}, description = "Verbose mode. ")
	public boolean verboseMode = false;

	/** minimum edge weight */
	@Parameter(names = {"-w","--minimumedgeweight"}, description = "minimum edge weight.")
	public int minEdgeWeight = 20;
	
	/** Path for finding the data and outputting results */
	@Parameter(names = {"-p","--path"}, description = "Path for finding the data and outputting results.")
	public String path = "./";
	
	/** Name of clustering output file without extension (.hcl is used by default) */
	@Parameter(names = {"-o","--output"}, description = "Name of hcluster output file without extension (.hcl is used by default).")
	public String output = "HomoCompara";	
	
	/** Minimum edge density between a join */
	@Parameter(names = {"-s","--minimumedgedensity"}, description = "Minimum edge density between a join")
	public String minEdgeDensity = "0.50";
	
	/** Maximum Size */
	@Parameter(names = {"-m","--maximumsize"}, description = "Maximum Size.")
	public int maxSize = 500;
	
	/** Resource path, where this module can find hcluster executable file */
	@Parameter(names = {"-rp","--resourcepath"}, description = "Hcluster resource path, where this module can find hcluster executable file. ")
	public String resourcepath = "./";
	
	/** execute Conversion Only */
	@Parameter(names = {"-e","--executeconversiononly"}, description = "execute conversion from hclust to blastclust results only.")
	public boolean executeconversiononly = false;
}
